#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

//int main()
//{
//	int a = 0;
//
//	printf("%d\n", a = 0);
//
//	return 0;
//}


//int* selfDividingNumbers(int left, int right, int* returnSize)
//{
//    int* arr = (int*)malloc(sizeof(int) * (right - left));
//    int count = 0;
//    for (int i = left; i <= right; i++)
//    {
//        int flag = 1;
//        int numI = i;
//        while (numI)
//        {
//            int num = numI % 10;
//            if (num == 0)
//            {
//                flag = 0;
//                break;
//            }
//            if (i % num != 0)
//            {
//                flag = 0;
//                break;
//            }
//            numI /= 10;
//        }
//        if (flag == 1)
//        {
//            arr[count] = i;
//            count++;
//        }
//    }
//    *returnSize = count;
//    return arr;
//}

int* productExceptSelf(int* nums, int numsSize, int* returnSize)
{
    int numsL[numsSize];
    int numsR[numsSize];
    int* ret = (int*)malloc(sizeof(int) * numsSize);

    numsL[0] = 1;
    for (int i = 1; i < numsSize; i++)
    {
        numsL[i] = numsL[i - 1] * nums[i - 1];
    }

    numsR[numsSize - 1] = 1;
    for (int i = numsSize - 2; i >= 0; i--)
    {
        numsR[i] = numsR[i + 1] * nums[i + 1];
    }

    for (int i = 0; i < numsSize; i++)
    {
        ret[i] = numsL[i] * numsR[i];
    }

    *returnSize = numsSize;
    return ret;
}